//数组中第 K 个独一无二的字符串
/*独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。

给你一个字符串数组 arr 和一个整数 k ，请你返回 arr 中第 k 个 独一无二的字符串 。如果 少于 k 个独一无二的字符串，那么返回 空字符串 "" 。

注意，按照字符串在原数组中的 顺序 找到第 k 个独一无二字符串。
*/
class Solution {
public:
    string kthDistinct(vector<string>& arr, int k) {
        unordered_map<string, int> hash;
        for (auto& s : arr) {
            hash[s]++;
        }
        int count = 0;
        for (auto& s : arr) {
            if (hash[s] == 1) {
                count++;
                if (count == k)
                    return s;
            }
        }
        return "";
    }
};

//查找共用字符
/*给你一个字符串数组 words ，请你找出所有在 words 的每个字符串中都出现的共用字符（包括重复字符），并以数组形式返回。你可以按 任意顺序 返回答案。*/
class Solution {
public:
    vector<string> commonChars(vector<string>& words) {
        vector<string> ret;
        int hash[26] = {0};
        for (int i = 0; i < words.size(); i++) {
            if (i) {
                int _hash[26] = {0};
                for (auto& c : words[i]) {
                    _hash[c - 'a']++;
                }
                for (int j = 0; j < 26; j++) {
                    hash[j] = min(hash[j], _hash[j]);
                }
            } else {
                for (auto& c : words[i]) {
                    hash[c - 'a']++;
                }
            }
        }

        for (int j = 0; j < 26; j++) {
            while (hash[j]) {
                ret.push_back(string(1, j + 'a'));
                hash[j]--;
            }
        }
        return ret;
    }
};